Methods On Demand 2023
Herzlich Willkommen!
- Samuel Merk
- Professor für empirische Schul- und Unterrichtsforschung
- Interessiert an evidenzinformierter Schul- und Unterrichtsentwicklung
- Open Science Enthusiast
- Inhaltliche Interessen
- Stand der Promotion
- Vorerfahrung Statistik
- Workshops
- Modelle (t-Test, ANOVA, …)
- Software
- An was würdet ihr gerne arbeiten?
Masterplan
- Grundbegriffe
- Korrelation
- Regression
- Einfache lineare Regression (LM)
- Multiple lineare Regression
- Generalized Linear Models (GLM)
- Logistische Regression
- Poisson Regression
- Konfirmatorische Faktorenanalyse (CFA)
- Latente Variablen
- Messmodelle
- Model-Fit Evaluation
- Strukturgleichungsmodellierung (SEM)
- Motivation
- Grundlegende Vorgehensweise
Zum Modus des Workshops
Block I: Grundbegriffe
Block II: Korrelation
Warm-Up Aufgaben
Definitionen
Die Pearson Definition ist wie folgt definiert:
\[r_{x, y}=\frac{\sum_{i=1}^n\left(x_i-\bar{x}\right)\left(y_i-\bar{y}\right)}{\sqrt{\sum_{i=1}^n\left(x_i-\bar{x}\right)^2 \sum_{i=1}^n\left(y_i-\bar{y}\right)^2}} = \frac{Cov(x,y)}{s_x \cdot s_y} = Cov(x,y) \cdot \frac{1}{s_x} \cdot \frac{1}{s_y}\]
In der folgenden dynamischen Visualisierung kann man sehen, dass die Kovarianz der »gerichteten Fläche« entspricht:
Da die Kovarianz aber von der Maßeinheit der Größen abhängt wird diese durch die Standardabweichung beider Größen geteilt.
Eigenschaften Pearson’s \(r\)
- Pearson’s \(r\) beschreibt die Stärke der (negativen oder positiven) Assoziation zweier bivariat normalverteilten Variablen
- Pearson’s \(r\) nimmt Werte zwischen -1 und 1 an \((-1 \leq r \leq 1)\). -1 impliziert die maximale negative Assoziation, 0 keine Assoziation und 1 die maximale positive Assoziation
- Nach Cohen (1988), gilt \(r =.1\) (bzw. \(r = -.1\)) als kleiner Effekt, \(r =.3\) (bzw. \(r = -.3\)) als moderater und \(r =.5\) (bzw. \(r = -.5\)) als starker Effekt
Visual Guessing Pearson’s \(r\)
Meiner Erfahrung nach ist es höchst sinnvoll Effektstärken in Grafiken überstezen zu können und umgekehrt. Um dies zu lernen kann die folgende handgestrickte App dienen.
Block III: Regression
Einfache lineare Regression
Bsp: Lernstunden vs. Lernerfolg
Parametrisierung
- Darstellung als Formel (Term)
- Typische Schreibweise: \(y_i = b_0 + b_1 \cdot x_i + \epsilon_i\)
- Generalisierte Schreibweise: \(y_i \sim \mathcal{N}(\mu,\,\sigma^{2})\) mit \(\mu = b_0 + b_1 \cdot x_i\)
- Datenbeispiel: \(\text{Punkte}_i = 10 + 0,5 \cdot \text{Vorbereitungsaufwand}_i + \epsilon_i\)
- Darstellung als Pfadmodell
Parameterschätzung
Effektstärke \(\beta_1\)
Effektstärke \(R^2\)
Multiple Regression
- Typische Schreibweise: * \(y_i = b_0 + b_1 \cdot x_{1i} + b_2 \cdot x_{2i} + \dots + b_j \cdot x_{ji} + \epsilon_i\)
- Generalisierte Schreibweise: \(y_i \sim \mathcal{N}(\mu,\,\sigma^{2})\) mit \(\mu = b_0 + b_1 \cdot x_{1i} + b_2 \cdot x_{2i} + \dots + b_j \cdot x_{ji}\)
- Datenbeispiel: \(\text{Punkte}_i = -0,13 + 0,52 \cdot \text{Vorbereitungsaufwand}_i + 0,38 \cdot \text{Pruefungsangst}_i + \epsilon_i\)
- Darstellung als Pfadmodell
- Geometrische Darstellung
Block IV: Generalized Linear Models
Ein verallgemeinertes lineares Modell umfasst typischerweise
- einen Datenvektor \(y = (y_1, . . . , y_n)\)
- Prädiktoren \(\mathbf{X}\) und Koeffizienten \(\beta\), die einen linearen Prädiktor \(\mathbf{X}{\beta}\) bilden
- Eine Verknüpfungsfunktion \(g\), die einen Vektor von transformierten Daten \(\hat{y}=g^{-1}(\mathbf(X) \beta)\) ergibt, die zur Modellierung der Daten verwendet werden
- Eine Datenverteilung, \(P(y)\)
- Möglicherweise andere Parameter, wie Varianzen, »Überstreuungen« und Grenzwerte, die in die Prädiktoren, die Verknüpfungsfunktion und die Datenverteilung eingehen.
Beispiel logistische Regression
Mit der logistischen Regression werden Binäre Daten (nominale Variablen mit zwei Ausprägungen) anhand von metrischen oder dummykodierten Variablen prädiziert. Dabei gilt:
\[\begin{aligned} y_i & \sim \operatorname{Bernoulli(p_i)} \\ \operatorname{logit}\left(p_i\right) & =X_i \beta \end{aligned}\]mit \(\operatorname{logit}(x)=\log (x /(1-x))\).
data_poll_repub <-
read_dta("data/polls.dta")
mod_poll01 <-
glm(bush ~ age,
family = binomial(link = "logit"),
data = data_poll_repub)
summary(mod_poll01)
Call:
glm(formula = bush ~ age, family = binomial(link = "logit"),
data = data_poll_repub)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.313 -1.292 1.047 1.067 1.108
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.36314 0.04812 7.547 4.47e-14 ***
age -0.04930 0.01887 -2.613 0.00898 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 15858 on 11565 degrees of freedom
Residual deviance: 15851 on 11564 degrees of freedom
(1978 observations deleted due to missingness)
AIC: 15855
Number of Fisher Scoring iterations: 3
mod_poll02 <-
glm(bush ~ black,
family = binomial(link = "logit"),
data = data_poll_repub)
summary(mod_poll02)
Call:
glm(formula = bush ~ black, family = binomial(link = "logit"),
data = data_poll_repub)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.336 -1.336 1.027 1.027 1.752
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.36581 0.01968 18.59 <2e-16 ***
black -1.65796 0.08382 -19.78 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 15858 on 11565 degrees of freedom
Residual deviance: 15376 on 11564 degrees of freedom
(1978 observations deleted due to missingness)
AIC: 15380
Number of Fisher Scoring iterations: 4
Block IV: Konfirmatorische Faktorenanalyse
Zunächst herzlichen Dank an Sascha Epskamp für die Möglichkeit Vieles aus seinen Materialien zu übernehmen!
Konfirmatorische Faktorenanalyse ist ein zentrales Tool der Psychometrie. Sie stellt eine Möglichkeit dar, den Zusammenhang von latenten Variablen und ihren Indikatoren formal zu beschreiben.
In dieser Schreibweise gilt:
- Kreise: Latente Variablen
- Rechtecke/Quadrate: Beobachtete Variablen/Measurements/Daten/Indikatoren
- Unidirektionale Pfeile: Kausale Effekte
- Bidirektionale Pfeile: Kovarianzen
\[ \begin{aligned} y_{i 1} & =\lambda_{11} \eta_{i 1}+\varepsilon_{i 1} \\ \eta_1 & \sim N\left(0, \sqrt{\psi_{11}}\right) \\ \varepsilon_1 & \sim N\left(0, \sqrt{\theta_{11}}\right) \end{aligned} \]
Man nennt \(\lambda_{11}\) Faktorladung, \(\varepsilon_{i 1}\) Residualvarianz und \(\psi_{11}\) Faktorvarianz. Obwohl wir die Skala des Faktors nicht kennen können wir dennoch die Varianz des Indikators zur Varianz der Variablen ins Verhältnis setzen:
\[ \operatorname{Var}\left(y_1\right)=\lambda_{11}^2 \psi_{11}+\theta_{11} \]
Schan daraus kann man sinnvolle statistische Größen für die Reliabilität ableiten, z.B. den Anteil der Varianz in der latenten Variable, die durch den Indikator erklärt wird.
\[ \frac{\lambda_{11}^2 \psi_{11}}{\lambda_{11}^2 \psi_{11}+\theta_{11}} \] Diese Annahmen identifizieren aber die Skala der latenten Variable noch nicht, denn wenn wir \(\lambda_{11}\) um \(c\) vervielfachen und \(\psi_{11}\) duch \(c^2\) teilen erhalten wir dieselbe Varianz von \(y\). Typischerweise »setzt«/»fixiert«/»restringiert« man entweder \(\lambda_{11} = 1\) oder \(\psi_{11} = 1\).
Das zentrale Problem ist nun, dass man Parameter und latente Variablen nicht simultan/gemeinsam schätzen (also aus den Daten ermitteln) kann. Die zentrale Strategie zur Lösung dieses Problems im Rahmen der CFA ist »Kovarianzmodellierung«. Dabei sucht man nach analytischen Zusammenhängen (»Formeln«) die nur die beobachteten Variablen/Daten enthalten und Varianzen/Kovarianzen der latenten Variablen:
In diesem Beisopiel erkennt man ein weiteres Problem: \(\operatorname{Var}\left(y_1\right)\) ist nicht »identifiziert« = »es gibt \(\infty\) viele Möglichkeiten für \(\operatorname{Var}\left(y_1\right)\)« = »es liegen negative Freiheitsgrade vor«. Diese sind weie folgt definiert:
\[\operatorname{DF}=a−b\] Wobei
- a die Anzahl der beobachteten Variablen ist, woraus sich \(\frac{a(a + 1)}{2}\) Varianzen und Kovarianzen berechnen lassen und
- b die Anzahl der Parameter ist. die geschätzt werden muss.
- Typischerweise braucht man 3 Indikatoren für ein Modell mit einer einzigen latenten Variable oder 2 je Faktor/latenter variable mit mehrern korrelierten latenten Variablen
Das allgemeine Rahmenmodell der CFA
\[ \begin{aligned} \boldsymbol{y}_i & =\boldsymbol{\Lambda} \boldsymbol{\eta}_i+\boldsymbol{\varepsilon}_i \\ \boldsymbol{y} & \sim N(\mathbf{0}, \boldsymbol{\Sigma}) \\ \boldsymbol{\eta} & \sim N(\mathbf{0}, \Psi) \\ \varepsilon & \sim N(\mathbf{0}, \boldsymbol{\Theta}) \end{aligned} \]
Dabei ist
- \(\boldsymbol{y}_i\) ein Vektor der Länge \(p\) mit den »Responses«/»beobachteten Variablen«/»Indikatoren«
- \(\boldsymbol{\eta}_i\) ein Vektor der Länge \(m\) von latenten Variablen
- \(\varepsilon_i\) ein Vektor der Länge \(p\) mit Residuen
- \(\Lambda\) eine Matrix der Größe \(p \times m\) mit Faktorladungen
- \(\boldsymbol{\Psi}\) eine symmetrische Matrix der Größe \(m \times m\) mit Varianzen und Kovarianzen
- \(\boldsymbol{\theta}\) eine symmetrische Matrix der Größe \(p \times p\) mit Varianzen und Kovarianzen der Residuen.
Die modellimplizierte Varianz-Kovarianz-Matrix ergibt sich dann als \[\boldsymbol{\Sigma}=\boldsymbol{\Lambda} \Psi \boldsymbol{\Lambda}^{\top}+\boldsymbol{\theta}\]
Schätzung von \(\boldsymbol{\Sigma}\)
Die beobachtete Varianz-Kovarianz-Matrix ist ein erwartungstreuer Schätzer für $. Die dabei typischerweise verwendete Maximum-Likelihood Funktion ist
\[F_{\mathrm{ML}}=\operatorname{trace}\left(\boldsymbol{S} \boldsymbol{\Sigma}^{-1}\right)-\ln \left|\boldsymbol{S} \boldsymbol{\Sigma}^{-1}\right|-p\]
- Dabei ist
- \(\boldsymbol{S}\) die beobachtete Varianz-Kovarianz-Matrix,
- \(\operatorname{trace}\) die Spur einer Matrix und
- \(\left| ... \right|\) die Determinate einer Matrix.
- \(F_{\mathrm{ML}}=0\) falls \(\boldsymbol{S} = \boldsymbol{\Sigma}\)
- \(F_{\mathrm{ML}}\) kann also sowohl zur Schätzung von \(\boldsymbol{\Sigma}\) dienen als auch als Maß für die »Devianz«/»Nicht-Passung des Modells«.
Eine anschauliche Einführung in die Grundprinzipien der ML-Schätzung bietet (Magnusson, 2020).
Beispiele für das CFA-Framework
One-Leg-Model
Two-Leg-Model
Three-Leg-Model
Two-Factor-Model
Two-Factor-Model mit Residualkovarianz
Modellfitevaluation für CFA
Test auf exakten Fit
Für das CFA-Framework gilt:
\[ n \cdot F_{ML} = T \sim \chi^2(\mathrm{DF}) \Longleftrightarrow \operatorname{Var}(\boldsymbol{y})=\boldsymbol{\Sigma}\] Das bedeutet man kann die Nullhypothese \(H_0: \; \boldsymbol{S} = \boldsymbol{\Sigma}\) (»exakter Fit«) testen. Problem dabei ist, dass nicht-signifikante Testergebnisse inkonklusiv sind und bei sehr großen \(N\) \(\boldsymbol{S}\) immer signifikant von \(\boldsymbol{\Sigma}\) abweicht, obwohl die »Effektstärke« der Nicht-Passung dabei sehr klein sein kann.
Root Mean Square Error of Approximation (RMSEA)
Der RMSEA misst operationalisiert den absoluten Fit (kein Vergleichsmodell) indem er den Missfit zur Anzahl der Freiheitgrade und der Stichprobengröße setzt:
\[\operatorname{RMSEA} = \sqrt{\frac{T_M-\mathrm{DF}_M}{\left(n \mathrm{DF}_M\right)}}\]
»Typische« Benchmarks (Hu & Bentler, 1999, S. marsh2004) sind:
- < .05 “very good fit” or “close fit”
- .05 − .08 “good fit” or “fair fit”
- .08 − .1 “mediocre fit” or “good fit”
- .05 − .08 “good fit” or “fair fit”
.10 “poor or unacceptable”
Der RMSEA ist einer der wenigen Indices, von denen man die approximative Verteilung kennt. Daher kann man in auch testen. Also z.B. die Nullhypothese verwerfen, dass \(\operatorname{RMSE} > .10\)
Inkrementelle Fit Indices
Es liegen eine Vielzahl an inkrementellen Fit-Indices vor. Alle haben Vor- und Nachteile. Zur Ermittlung dieser Indices wird der Fit des vorliegenden Modells mit dem Fit des Baselinemodells oder dem Fit des saturierten Modells verglichen.
Zum Beispiel:
- \(\operatorname{TLI}=\frac{T_B-\frac{d f_B}{d f_M} T_M}{T_B}\)
- \(\operatorname{CFI}=1-\frac{T_M-d f_M}{T_B-d f_B}\)
wobei das Index \(_{B}\) für das Baselinemodell steht.
Worked out Examples: CFA
Strukturgleichungsmodellierung (SEM)
Strukturgleichungsmodelle unterscheiden sich von CFA-Modellen dadurch, dass sie neben dem Messmodell zusätzlich noch ein Strukturmodell annehmen. Die unglaubliche Vielfalt an Modellklassen die SEM erlaubt rührt im wesentlichen von der Tatsache her, dass in SEM Variablen abhängige und unabhängige Variable zugleich sein können. So lassen sich Modelle für
- Gruppenunterschiede
- Konstruktvalidierung
- Zeitliche Verläufe
- Ähnlichketi von zeitlichen Verläufen
- u.v.a.m.
spezifizieren.
Struktiurgelichungsmodellierung zur Schätzung wahrer (nicht-verdünnter) Effekte
mod_holz_3f <-
"vis =~ x1 + x2 + x3
tex =~ x4 + x5 + x6
spe =~ x7 + x8 + x9"
# Latente Unterschiede
fit_holz_3f_gr <-
cfa(mod_holz_3f,
data = HolzingerSwineford1939,
group = "grade",
group.equal = c("loadings", "intercepts", "lv.variances"))Warning in lav_data_full(data = data, group = group, cluster = cluster, : lavaan WARNING: group variable 'grade' contains missing values
parameterestimates(fit_holz_3f_gr) lhs op rhs block group label est se z pvalue ci.lower ci.upper
1 vis =~ x1 1 1 1.000 0.000 NA NA 1.000 1.000
2 vis =~ x2 1 1 .p2. 0.547 0.099 5.534 0.000 0.353 0.740
3 vis =~ x3 1 1 .p3. 0.722 0.108 6.661 0.000 0.510 0.935
4 tex =~ x4 1 1 1.000 0.000 NA NA 1.000 1.000
5 tex =~ x5 1 1 .p5. 1.108 0.065 17.132 0.000 0.982 1.235
6 tex =~ x6 1 1 .p6. 0.924 0.055 16.898 0.000 0.817 1.031
7 spe =~ x7 1 1 1.000 0.000 NA NA 1.000 1.000
8 spe =~ x8 1 1 .p8. 1.108 0.141 7.862 0.000 0.832 1.385
9 spe =~ x9 1 1 .p9. 0.936 0.124 7.558 0.000 0.693 1.179
10 x1 ~~ x1 1 1 0.603 0.144 4.202 0.000 0.322 0.885
11 x2 ~~ x2 1 1 1.165 0.143 8.174 0.000 0.886 1.445
12 x3 ~~ x3 1 1 0.742 0.111 6.707 0.000 0.525 0.958
13 x4 ~~ x4 1 1 0.368 0.061 6.023 0.000 0.248 0.488
14 x5 ~~ x5 1 1 0.434 0.074 5.895 0.000 0.290 0.579
15 x6 ~~ x6 1 1 0.275 0.049 5.589 0.000 0.179 0.371
16 x7 ~~ x7 1 1 0.663 0.097 6.866 0.000 0.474 0.853
17 x8 ~~ x8 1 1 0.444 0.085 5.238 0.000 0.278 0.610
18 x9 ~~ x9 1 1 0.683 0.095 7.217 0.000 0.498 0.869
19 vis ~~ vis 1 1 .p19. 0.772 0.141 5.488 0.000 0.496 1.048
20 tex ~~ tex 1 1 .p20. 0.943 0.108 8.737 0.000 0.731 1.155
21 spe ~~ spe 1 1 .p21. 0.368 0.076 4.837 0.000 0.219 0.516
22 vis ~~ tex 1 1 0.283 0.088 3.215 0.001 0.110 0.455
23 vis ~~ spe 1 1 0.218 0.065 3.322 0.001 0.089 0.346
24 tex ~~ spe 1 1 0.108 0.061 1.769 0.077 -0.012 0.228
25 x1 ~1 1 1 .p25. 4.732 0.091 52.248 0.000 4.555 4.910
26 x2 ~1 1 1 .p26. 5.978 0.077 77.660 0.000 5.827 6.129
27 x3 ~1 1 1 .p27. 2.099 0.077 27.147 0.000 1.947 2.251
28 x4 ~1 1 1 .p28. 2.858 0.088 32.634 0.000 2.686 3.030
29 x5 ~1 1 1 .p29. 4.114 0.097 42.493 0.000 3.924 4.303
30 x6 ~1 1 1 .p30. 2.003 0.080 24.910 0.000 1.845 2.160
31 x7 ~1 1 1 .p31. 3.902 0.075 51.869 0.000 3.754 4.049
32 x8 ~1 1 1 .p32. 5.219 0.073 71.666 0.000 5.076 5.362
33 x9 ~1 1 1 .p33. 5.113 0.073 70.410 0.000 4.970 5.255
34 vis ~1 1 1 0.000 0.000 NA NA 0.000 0.000
35 tex ~1 1 1 0.000 0.000 NA NA 0.000 0.000
36 spe ~1 1 1 0.000 0.000 NA NA 0.000 0.000
37 vis =~ x1 2 2 1.000 0.000 NA NA 1.000 1.000
38 vis =~ x2 2 2 .p2. 0.547 0.099 5.534 0.000 0.353 0.740
39 vis =~ x3 2 2 .p3. 0.722 0.108 6.661 0.000 0.510 0.935
40 tex =~ x4 2 2 1.000 0.000 NA NA 1.000 1.000
41 tex =~ x5 2 2 .p5. 1.108 0.065 17.132 0.000 0.982 1.235
42 tex =~ x6 2 2 .p6. 0.924 0.055 16.898 0.000 0.817 1.031
43 spe =~ x7 2 2 1.000 0.000 NA NA 1.000 1.000
44 spe =~ x8 2 2 .p8. 1.108 0.141 7.862 0.000 0.832 1.385
45 spe =~ x9 2 2 .p9. 0.936 0.124 7.558 0.000 0.693 1.179
46 x1 ~~ x1 2 2 0.470 0.133 3.538 0.000 0.210 0.731
47 x2 ~~ x2 2 2 1.116 0.142 7.860 0.000 0.838 1.394
48 x3 ~~ x3 2 2 0.968 0.135 7.166 0.000 0.704 1.233
49 x4 ~~ x4 2 2 0.370 0.068 5.404 0.000 0.236 0.504
50 x5 ~~ x5 2 2 0.465 0.085 5.472 0.000 0.298 0.631
51 x6 ~~ x6 2 2 0.449 0.071 6.359 0.000 0.310 0.587
52 x7 ~~ x7 2 2 0.824 0.119 6.945 0.000 0.591 1.056
53 x8 ~~ x8 2 2 0.487 0.093 5.238 0.000 0.305 0.669
54 x9 ~~ x9 2 2 0.551 0.086 6.401 0.000 0.383 0.720
55 vis ~~ vis 2 2 .p19. 0.772 0.141 5.488 0.000 0.496 1.048
56 tex ~~ tex 2 2 .p20. 0.943 0.108 8.737 0.000 0.731 1.155
57 spe ~~ spe 2 2 .p21. 0.368 0.076 4.837 0.000 0.219 0.516
58 vis ~~ tex 2 2 0.465 0.089 5.214 0.000 0.290 0.640
59 vis ~~ spe 2 2 0.183 0.067 2.748 0.006 0.052 0.314
60 tex ~~ spe 2 2 0.139 0.065 2.140 0.032 0.012 0.266
61 x1 ~1 2 2 .p25. 4.732 0.091 52.248 0.000 4.555 4.910
62 x2 ~1 2 2 .p26. 5.978 0.077 77.660 0.000 5.827 6.129
63 x3 ~1 2 2 .p27. 2.099 0.077 27.147 0.000 1.947 2.251
64 x4 ~1 2 2 .p28. 2.858 0.088 32.634 0.000 2.686 3.030
65 x5 ~1 2 2 .p29. 4.114 0.097 42.493 0.000 3.924 4.303
66 x6 ~1 2 2 .p30. 2.003 0.080 24.910 0.000 1.845 2.160
67 x7 ~1 2 2 .p31. 3.902 0.075 51.869 0.000 3.754 4.049
68 x8 ~1 2 2 .p32. 5.219 0.073 71.666 0.000 5.076 5.362
69 x9 ~1 2 2 .p33. 5.113 0.073 70.410 0.000 4.970 5.255
70 vis ~1 2 2 0.428 0.125 3.435 0.001 0.184 0.672
71 tex ~1 2 2 0.421 0.120 3.496 0.000 0.185 0.657
72 spe ~1 2 2 0.576 0.099 5.809 0.000 0.382 0.770
# Manifeste Unterschiede
HolzingerSwineford1939_Skalenwerte <-
HolzingerSwineford1939 |>
rowwise() |>
mutate(visS = mean(c(x1, x2, x3)),
texS = mean(c(x4, x5, x6)),
speS = mean(c(x7, x8, x9))) |>
ungroup()
# cohen d vis
effsize::cohen.d(visS ~ grade,
data = HolzingerSwineford1939_Skalenwerte)Warning in cohen.d.formula(visS ~ grade, data =
HolzingerSwineford1939_Skalenwerte): Cohercing rhs of formula to factor
Cohen's d
d estimate: -0.403894 (small)
95 percent confidence interval:
lower upper
-0.6336845 -0.1741034